<?php 

/**
 * Classe responsável por gerenciar informações dos candidatos
 * 
 */
class Admin_Model_Candidatos
{
    
    /**
     * Busca informações completas do candidato pelo código da matrícula
     * 
     * @param string $matricula
     * @return array $result
     */
    public function infoCandidatoPorMatricula($matricula) 
    {
        try {
            $tblEmpregado = new Admin_Model_DbTable_Sigrh_Empregados();
            $slcEmpregado = $tblEmpregado->select();
            $slcEmpregado->from(array('emp' => 'empregados'), array('emp_nr_cpf as cpf', 'emp_nome as nome', 'emp_email as email', 'emp_cd_matricula as matricula', 'emp_dt_admissao as dt_admissao', 'emp_cd_lotacao_1', 'emp_dr', 'emp_turno', 'emp_carga_hor', 'emp_lot_definitiva', 'emp_cd_lotacao_2', 'emp_dr_sec', 'emp_turno_sec', 'emp_carga_hor_2', 'emp_lot_definitiva_1'), 'sigrh')
                         ->joinLeft(array('empc' => 'empregados_complementos'), 'emp.emp_cd_matricula = empc.emp_cd_matricula', array("empc.emp_tempo_see as tmpServico"), 'sigrh')
                         ->joinLeft(array('ende' => 'enderecos'), 'emp.emp_cd_matricula = ende.emp_cd_matricula', array('ende.emp_cep as cep', 'ende.emp_endereco as endereco', 'ende.emp_municipio as municipio', 'ende.emp_bairro as bairro', 'ende.emp_uf as estado'), 'sigrh')
                         ->joinLeft(array('lot1' => 'lotacoes'), 'emp.emp_cd_lotacao_1 = lot1.tlo_cd_lotacao', array('tlo_descricao as ds_lotacao_1'), 'sigrh')
                         ->joinLeft(array('lot2' => 'lotacoes'), 'emp.emp_cd_lotacao_2 = lot2.tlo_cd_lotacao', array('tlo_descricao as ds_lotacao_2'), 'sigrh')
                         ->joinLeft(array('lot_sub1' => 'tbl_reman_escola_rural_urbana'), 'emp.emp_cd_lotacao_1 = lot_sub1.cd_lotacao', array('rural_urbana as tp_lotacao_1'), 'remanejamento')
                         ->joinLeft(array('lot_sub2' => 'tbl_reman_escola_rural_urbana'), 'emp.emp_cd_lotacao_2 = lot_sub2.cd_lotacao', array('rural_urbana as tp_lotacao_2'), 'remanejamento')
                         ->setIntegrityCheck(false)
                         ->where('emp.emp_cd_matricula = ?', $matricula);
            $result = $tblEmpregado->fetchRow($slcEmpregado);

            // Verifica se houve resultado na busca.
            if (!empty($result)) {
                $result = $result->toArray();
            }    
        } catch (Exception $exc) {
            $result = array();
//            echo $exc->getTraceAsString();
        }
        
        return $result;
    }
 
    
    /**
     * Funão que irá inserir uma nova habilitação no perfil do candidato.
     * 
     * @param string $matricula
     * @param int $coHabilitacao
     */
    public function inserirHabilitacao($matricula, $coHabilitacao) 
    {
        try {
            $bind['emp_cd_matricula']   = $matricula;
            $bind['hab_cd_habilitacao'] = $coHabilitacao;
            
            $tblHabilEmpr   = new Admin_Model_DbTable_Sigrh_HabilitacoesEmpregados();
            $row = $tblHabilEmpr->insert($bind);
            
            $result = array('type'      => 'success',
                            'result'    => true,
                            'flashMsg'  => 'A habilitação inserida com sucesso!');
            
        } catch (Exception $exc) {
            $result = array('type'      => 'erro',
                            'result'    => false,
                            'flashMsg'  => 'Houve um erro interno e não foi possível salvar esta habilitação!');
        }

        return $result;
    }
    
    
    /**
     * Função que irá remover uma determinada habilitação
     * -- Esta função é irreversível, pois o banco de dados nao guarda log e nem coloca flag de inativo.
     * 
     * @param string $matricula
     * @param int $coHabilitacao
     */
    public function removerHabilitacao($matricula, $coHabilitacao) 
    {
        try {
            $bind['emp_cd_matricula']   = $matricula;
            $bind['hab_cd_habilitacao'] = $coHabilitacao;
            $where                      = "emp_cd_matricula = '{$matricula}' AND hab_cd_habilitacao = {$coHabilitacao}";
            
            // Remove a habilitação do candidato
            $tblHabilEmpr   = new Admin_Model_DbTable_Sigrh_HabilitacoesEmpregados();
            $tblHabilEmpr->delete($where);
            
            $result = array('type'      => 'success',
                            'result'    => true,
                            'flashMsg'  => 'A habilitação removida com sucesso!');
            
        } catch (Exception $exc) {
            $result = array('type'      => 'erro',
                            'result'    => false,
                            'flashMsg'  => 'Houve um erro interno e não foi possível salvar esta habilitação!');
        }

        return $result;
    }
    
    
    /**
     * Função que irá modificar a inscrição de um determinado candidato na parte que envolva 
     * informações sobre PNE.
     * -- Esta função não fará validação
     * 
     * @param string $acao
     * @param string $matricula
     * @return array $result
     */
    public function statusPne($acao, $matricula) 
    {
        try {
            $modRemInscri   = new Remanejamento_Model_Inscricao();
            $infoCandidato  = $this->infoCandidatoPorMatricula($matricula);
            
            if ($acao == 'pne') {
                $tmpServ = $infoCandidato['tmpServico'];
                $bind['ins_adic_nec_esp']   = $modRemInscri->adicionalNecEspeciais(1, $tmpServ);
                $where                      = "ins_cd_matricula = '{$matricula}'";

            } elseif ($acao == 'naoPne') {
                $tmpServ                    = $infoCandidato['tmpServico'];
                $bind['ins_adic_nec_esp']   = $modRemInscri->adicionalNecEspeciais(0, $tmpServ);
                $where                      = "ins_cd_matricula = '{$matricula}'";
            }
            
            //Modifica os valoes da inscrição do candidato...
            $tbl = new Admin_Model_DbTable_Remanejamento_Inscricoes();
            $tbl->update($bind, $where);            
            
            // Informar sucesso no parâmetro
            $result = array('type'      => 'success',
                            'result'    => true,
                            'flashMsg'  => 'As informações de inscrição candidato foram modificadas com sucesso!');
            
        } catch (Exception $exc) {
            $result = array('type'      => 'erro',
                            'result'    => false,
                            'erro'      => $exc->getMessage(),
                            'trace'     => $exc->getTraceAsString(),
                            'flashMsg'  => 'Houve um erro interno e não foi possível salvar esta habilitação!');
        }

        return $result;
    }   
}
    